Changes done in the following versions:

1.00-1.10
---------
* Created

1.11
----
* Fixed a bug in layer 2 routine, which made these files sound real weird.
* Added 8-bit sound support.
* Added support for ARMs without SMULL.

1.12
----
* Tuned many things to cajole the compiler into making code I like. This has
  speeded up everything (especially layer 3) quite a lot.
* The program simply got too fast, which triggered a latent bug, that has
  now been removed.
* Added an "auto queue" function to the frontend. This queues the next file
  in the same directory if enabled.
* Added some system vars, that can control the buffer size and the volume.

1.13-1.14
---------
* Fixed a bug that could happen if none of the system vars were defined.
* Various speed improvements. Not much, but it's the right direction.

1.15
----
* Forgot to make the ID3 genre byte available in the file info block.
* Changed Auto Q to continue into directories it may meet while looking for
  the next file. It will also go up and continue the scan in the parent when
  meeting the end of a directory.
* Mono was untested and of course it didn't work. It seems ok now, but my
  collection of mono files is very much smaller than stereo, so no
  guarantees.
* If a tag is present, the player will stop looking for frames when getting
  close enough to the end of the file (and only garbage can be left). Some
  programs seem to align the tag on a 16 bit boundary (guess what machines
  these come from), thus leaving a malformed header just before it.

1.16
----
* By request, an iconbar icon was added, so you can close/open the window
  without quitting/restarting the app.
* Some more checks on the frame headers added, so it skips more silly things.

1.17
----
* Changed the skipping of daft RIFF-headed mpeg streams, so it doesn't skip
  quite so much.
* More header checking, some more malformed streams work now.
* Argh, the 'clean' clipping brought back the mono bug. Now gone again.
* An error now stays displayed for the appropriate time, also if the playback
  stops.
* Changed some things to make the claims in the help file true, especially
  wrt pausing.

1.18
----
* Changed the cpu verification code. The plan is to have only one module soon.
* Changed the autoQ scan to look for files of same type rather than files of
  type AMPEG.

1.19
----
* MPEG 2.0 layer 3 sounded weird (untested), and a bug was removed that fixed
  it.
* Made the frontend quit if the module disappears.
* AMPlayer_Info now returns useful info at all times (e.g. the latest error
  can be returned even if it made the player stop, which it couldn't before).
* "Stream error" replaced by 3 more descriptive messages.
* Survives more stream errors now - some weird ones could provoke a data abort
  which wasn't very nice.

1.20
----
* Put a limit on the number of files that will be skipped while scanning for
  a file to queue (with Auto Q). If that limit is reached, auto Q is turned
  off. Currently the limit is 30, but will be user-adjustable at some point.
* Added the option of killing the module at the same time as quitting the
  frontend.

1.21
----
* Skipping back and forth was somewhat erratic at large buffer sizes, so now
  it discards the buffer when the target point has been located. This improves
  response, but means that only fast filing systems can supply enough data
  to have sound while skipping.

1.22
----
* Changed the SWI and error number bases to allocated ones. (&52E00 and
  &816B00 respectively).
* Added code to check if SVC stack is almost empty when getting a callback.
  This may get round some NFS/ShareFS problems, but I can't test it myself.
* Changed the frequency selection so it gets closer to the desired one if
  the exact match isn't available.

1.23
----
* Changed the frame->time formula so files that last a long time should not
  make the counter wrap around (though I have none of those, so it's untested)
* Changed the frontend to show the _module_ version to avoid confusion.

1.24
----
* Did a bit of research, and this enabled me to get some, if not all, of the
  files working, that previously had strange bubbly noises in them. This is
  apparently streams made by Xion and AudioCatalyst.

1.25
----
* Most of the time, the stack depth checking didn't actually work. This has
  been fixed, and the checking method has also been changed (it now registers
  a callafter to re-register the callback, to avoid getting into infinite
  loops).
* Finally found the cause of the wimp errors that could crop up when stopping.
  Sadly, the fix is not exactly what I would have wanted, because it means that
  the dynamic area is present until the module is killed (instead of only while
  playing). It does, however, give you the ability to drag the buffer size,
  also when it isn't playing.
* The stack check level has been made adjustable (probably temporary until a
  nice overall value is found).
* Added AMPlayer$FileBuffer that controls the input buffer size.

1.26
----
* Added another auto-queue state to the frontend, which is entered when no
  file could be queued. This means that you stay in auto-queue mode, instead
  of the previous behaviour where it would be turned off.
* Added the -Cue switch to the *AMPlay command.
* Added an *AMPause command.
* Added an *AMLocate command.
* Added stuff to do with upcoming plugins. It isn't complete, don't use it.

1.27
----
* Added plugin support.
* SWI AMPlayer_Info did not preserve all the FP registers in some cases.

1.28
----
* Extended plugin support.
* Added SWI AMPlayer_FileInfo
* Adjust-close on frontend window opens the directory containing the file
  currently playing (if possible).
* Frontend now uses AMPlayer_FileInfo to verify files when it is looking for
  the next one to queue.
* If file starts with an ID3v2 header, it will be skipped (how many headers
  and stuff are people going to add before they realise that it's a new
  file format and call it something else?)
* Variable bit rate MP3 files now work.
* AMPlayer$Volume is updated when the module is killed.
* ID3v1.1 tags are now supported (track numbers are now returned)
* 'Shutdown complete' now stops playing.
* Less RMA 'thrashing' (reallocation of offset cache is now 'blocky')

1.29
----
* ID3v2 support added.
* Resizing dynamic area no longer causes music to stop.
* Fixed aborts that happened occasionally with varying layers and bitrates.
* Switching between tracks played at different frequencies is smooth and
  no longer gives helium-voices, or mega-lethargic-voices.
* AMLocate command now accepts hh:mm:ss and mm:ss instead of the awkward
  hh[:mm[:ss]] format.
* High and low bitrates described for variable bitrate files
* MPEG 2.5 at 8kHz and 12kHz now supported.
* Stereo is around the right way.
* VBR support for 'total time' added.
* *AMInfo can now be passed a filename to provide information on that file.
* Removed API information from !Help
* Created AMPlayerSWIs manual (Andrew Hill)
* ID3v2 frame data is now 0 terminated.

1.30
----
* Fix for misused Xing VBR headers (filesize given as zero rather than
  omitted).
* Minor correction of a link in the StrongHelp manual.

1.31-1.33
---------
* ARM coded many routines for speed.
* Revamped build system.
* Added application builds (for development only)
* Added SharedSound support.
* Added Streaming Interface.
* Added MetaData Interface.
* Added Internal Event System.
* Reworked read_frame routine to back out on lack of data.
* Reworked read_frame routine to cope with skipping broken data.
* Reworked all code to run from ROM (Except that using the 8 bit sound system).
* Added support for Multiple Instantiations.
* Any pending callbacks are killed on finalisation.
* Reinit active sound systems on Sound Started Service.
* Moved AMPlayer module into !System, and added dummy AMPlayer module to
  load the correct variant for the CPU in use automatically.
* Adjust click on 'AutoQ' clears the queued item
* Only AMPEG files can be added to the playlist.

1.34
----

[Internal unreleased version]

1.35
----
* Improved multiple instantiation behaviour - now sends module instantiation
  suffix to SharedSound as part of handler name.
* Added callback 'safety net' (if AMPlayer comes unthreaded, we rethread on
  a once-per-second basis).
* Corrected stereo ordering in AMPApp.
* Added sound system config SWI, together with 'User Sound System' SWIs; this
  enables decode-but-not-play operation.
* Pulled many tables into the code; this increases ROM usage (or RAM in the
  softload case), but is paid back many times when we start multiply
  instantiating the module. MI is now MUCH faster as no tables are generated.
* Removed stray SMULL in the synthfp code.
* Improved EOF handling in streaming case.
* Bugfixes to frame decoding code; more resistant to broken streams.
* Added Instance SWI calls.
* Added instance details to service calls (instance handle in R8).
* Responds to Sound system layers starting/stopping - so reiniting SharedSound
  (or other systems where supported) does not stop playback. AMPlayer will
  also degrade its sound system if SharedSound is killed, reverting when
  SharedSound returns.
* Fix for shared sound 'volume scale+mixing' fill code.
* Fix for RIFF WAVE headers being incorrectly skipped (would previously skip
  starts of some tracks). Also allows us to correctly perform FileInfo
  requests on such files.
* AMPlayer_Plugin, AMPlayer_Control and the streaming SWIs have had their
  APIs rationalised. We now support directed queries to AMPlayer.
* The AMPlayer$Volume system variable reflects the base instantiation only,
  and new instantiations receive the current base instantiation volume as
  their initial volume.
* Improved internal handling of stream starvation.
* Service_AMPlayer reason code 6 (Buffers becoming free) added.
* *AMLocate can now take a -ve or +ve offset to move relative to the current
  position.

1.36
----
* AMPApp: Fixed -w with no output file.
* Fixed 8 bit sound system detection.
* Improved FP speed (synth routines).

1.37/1.38
---------
* AMPApp: Corrected sound system detection to allow all versions to run on all
  machines.
* Added transient playback. Transient playback instances will automatically be
  terminated when the playback completes.
* Documentation cross references improved and AMPlayer_Control documentation
  corrected.
* *AMPlay can now take -Transient to use transient playback.
* Sped up FP code.
* Sped up 32x32=>64 routines in AMPxxx6 builds.
* Added 2x decimation code to FP and 6 builds.
* AMPlayer$DecimationThreshold now used to set the sample frequency at which
  decimation should kick in.
* Fixed layer 1 Mono and joint stereo.
* Fixed (we think) Layer 3 8000Hz.
* Fixed infinite loop in ID3v2 code.
* Added magic protection to directed instance calls.
* FrontEnd: Can select an instance to work with; streaming instances will
  have their buttons greyed for operations which are not applicable.
* FrontEnd: Ctrl-drag file will play file 'transiently'. Mostly only useful
  for testing.
* Directed calls are now protected against invalid handles being passed to
  the module.
* FrontEnd: Indication of frequency improved.
* On shutdown request we pause music, which prevents a remount of the disc
  after the disc is dismounted; we already stop when shutdown is complete.
* New huffman table lookup code (htc case).
* Shrunk huffman tables to halfword (ht case).
* Shrunk alloc tables from 2 words to 1 word by packing.
* New bitbuffer functions.
* Simplified logic in III_dequantize_sample and III_dequantize_sample_ms.
* Applied ARM Ltds trick for reducing table size - thanks to Andre!
* Applied single buffer change to dct36 - thanks to Andre!
* File and stream handling merged. No current benefit, but should allow
  improvements later.
* AMPlay now takes -next to start the queued track
* AMVolume can accept +volume or -volume to apply relative volume levels.
* Stupid bug fixed in III_dequantise_sample_ms.
* Side info region overflow bug fixed in layer 3; appears present in MPG123
  too.
* FrontEnd: Pause-Transience bug fixed (paused tracks would cause transience
  requests to be ignored)
* Addition of AMPlayer_Control buffer size in blocks, as well as bytes.
* Potential fix for streaming problems (eof being set on unstarted streams)
* Fix for null instance names (now appear as 'Unknown').
* Fix for streaming problems; pending queue was being held with 0 terminator;
  thus a race condition existed in which blocks were incorrectly marked as
  being free.
* Fix for MPEG 1, layer III 64kbps stereo files which exhibited bit errors
  and chirps.

1.39
----
* Fixed bug in layer II decoding that caused bitrate/layer errors and/or
  crashing.
* Fixed AMPApp WAV reversal overrun code.
* Fixed Decimation being stuck with a threshold of 0.

1.40
----
* Rebuilt source code for ARMv7 compatibility, and recoded some assembler to
  not use unaligned word accesses.

1.41
----
* Merged work done on the trunk version after the 32 bit work started on
  the amplayer-1_39-32bit-peter branch. Specifically
  r215:
    Fix for SWI AMPlayer_Info not clearing FIB.
  r216:
    Evil addition of frame filters (might be removed in future).
    Addition of VBRI-style variable bit rate indicators, and improved Xing
    indicator parsing.
  r217:
    Only issue service calls from the module, not application.
  r219:
    Allow scroll requests to change the volume on the front end.
    Fix for corrupt level 2 decoding stiffing the machine.
  r220:
    Fix for corrupt level 3 decoding causing aborts.
  r225:
    Update MPEG123 tables of constants.
  r226:
    Fix for AMPlayer_Control stack size operations not following API, should
    return value in R1.
* Updated the documentation to refer to the current host at riscos.info
  and to remove any other dead links and email addresses.
* The modules and command line applications have been built as 26/32 bit
  neutral to remove the burden of maintaining two different builds. The
  modules will run on RISC OS 3.50 or later.

1.42
----
* Removed two errant LDM^ instructions from the example AMPlayer frontend.
* Fixed an abort in the module when running on a Raspberry Pi 3.
